package com.demo2;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2022-12-21
 * Time: 20:33
 */

class Singleton1{
    private volatile static Singleton1 instance = null;
    //构造函数
    private Singleton1(){}
    //类外获取到
    public static Singleton1 getInstance(){
        if (instance == null){
            synchronized (Singleton1.class){
                if (instance == null){
                    return new Singleton1();
                }
            }
        }
        return instance;
    }

}

//单例模式 - 饿汉模式
public class TestDemo1 {
    public static void main(String[] args) {
        Singleton1 instance = Singleton1.getInstance();
        //饿汉模式 的三个注意事项
        //1.synchronized加锁
        //2.双重if判断 中间夹着synchronized加锁 缓解加锁之后的锁冲突
        //3.volatile 防止指令重排序 一个对象的产生new 1.创建内存 2.针对内存初始化 3.把内存地址赋值给引用 防止这三个步骤的重排序
    }
}
